/**
 * Clase PantallaListadoMedicamentos: define la pantalla donde se mostraran los resultados de la
 * busqueda realizada en el formulario PantallaBusquedaMedicamentos
 */

package infbmobile.pantallas;

// Importaciones externas
import com.sun.lwuit.*;
import com.sun.lwuit.animations.CommonTransitions;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.layouts.*;
import com.sun.lwuit.events.ActionListener;
import java.util.*;

// Importaciones internas
import infbmobile.main.*;
import infbmobile.util.UIHerramientas;


public class PantallaListadoMisPacientes extends Form implements ActionListener {
    // Referencia al midlet principal
    public InfBMobileMedico midlet;

    // Atributos de clase
    // El listado con los resultados indexados de los medicamentos encontrados pasado como parametro
    // por la clase "madre" PantallaBusquedaMedicamentos
    private Hashtable listado;
    // Un hash donde asociaremos un medicamento(String[]) a un determinado boton
    private Hashtable hashBotonesMedicamentos;
    private Command comandoVolver;


    /*
     * Constructor principal de la clase
     */
    public PantallaListadoMisPacientes(InfBMobileMedico midlet,Hashtable listado) {
        super("Pacientes Encontrados - HospiGest Medico");
        this.midlet=midlet;
        this.listado=listado;
        // Fijamos el layout del formulario
        setLayout(new BoxLayout(BoxLayout.Y_AXIS));
        Label labPacientes = new Label("Pacientes: ");
        labPacientes.getStyle().setMargin(Component.BOTTOM, 0);
        addComponent(labPacientes);
        // Creamos el hash de botones:: esto es el "truco"
        Enumeration e=listado.elements();
        // En este punto tenemos una "enumeracion" con todos los arrays de strings que representan
        // los datos de un paciente (recordemos que aqui no tenemos la clase paciente, es por
        // ello por lo que se ha decidio almacenar los datos devueltos por el servidor en un array
        // de Strings)
        hashBotonesMedicamentos=new Hashtable();
        while(e.hasMoreElements()){
            String[] paciente=(String[])e.nextElement();
            // Segun el protocolo que definimos, la posicion 1 del array (ojo no la 0)
            /*
                    0 id
                    1 nombre
                    2 apellido1
                    3 apellido2
                    4 telefono
                    5 mail
                    6 direccion
                    7 localidad
                    8 grupoSang
             *      9 fechaNaciemiento
            */
            Button boton=new Button(paciente[1]+" "+paciente[2]+" "+paciente[3]+" ("+paciente[7]+")");
            // Fijamos la apariencia del boton
            boton.setAlignment(Label.LEFT);
            boton.getStyle().setPadding(5, 5, 5, 5);
            boton.getStyle().setMargin(0, 0, 2, 2);
            // Establecemos el listener para el boton (muy importante)
            boton.addActionListener(this);
            // Agregamos el boton creado con los datos relevantes del paciente al formulario
            addComponent(boton);
            // Asociamos el boton a esos datos para luego poder recuperarlos facilmente
            // en el metodo de escucha de eventos (va por ti carlos ;) )
            hashBotonesMedicamentos.put(boton,paciente);
        }
        // Configuramos los comandos
        comandoVolver=new Command("Volver");
        addCommand(comandoVolver);
        setCommandListener(this);
        // Fijamos la transicion de aparicion/desaparicion para una mejor apariencia
        setTransitionInAnimator(CommonTransitions.createSlide(CommonTransitions.SLIDE_HORIZONTAL,false,500));
        setTransitionOutAnimator(CommonTransitions.createSlide(CommonTransitions.SLIDE_HORIZONTAL,true,500));
    }

    public void actionPerformed(ActionEvent evento) {
        Object fuente=evento.getSource();

        // Recogemos de donde vino el evento
        if(fuente==comandoVolver){
            System.gc();
            midlet.mostrarPantallaBusquedaMisPacientes();
        }else{
            // Recuperamos toda la informacion asociada al paciente representado por el boton
            String[] paciente=(String[])hashBotonesMedicamentos.get(fuente);
            PantallaInformacionPaciente pantallaInformacionMisPaciente=new PantallaInformacionPaciente(this,paciente,midlet);
        }
    }

}